package cn.itcast.java.jdbc;

import java.sql.*;

/**
 * Author itcast
 * Date 2021/10/14 9:51
 * 通过JDBC驱动连接mysql数据库并执行查询数据表数据
 * 数据表 category
 * 开发步骤：
 * 1.加载jar包 jdbc ，com.mysql.jdbc.Driver
 * 2.获取数据库的连接
 * 3.创建statement
 * 4.创建查询sql
 * 5.执行查询操作，获取数据集 ResultSet
 * 6.遍历数据集并将结果打印输出
 * 7.关闭数据集，statement，connection连接
 */
public class JDBCDemo {
    private static Connection conn = null;
    private static Statement statement = null;
    private static ResultSet rs = null;
    public static void main(String[] args) {
        //1.加载jar包 jdbc ，com.mysql.jdbc.Driver
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取数据库的连接
            //URL
            // jdbc:mysql://服务器主机名(IP):3306/数据库名?参数
            // 参数： useSSL = false
            String url = "jdbc:mysql://192.168.88.163:3306/day06?useSSL=false";
            conn = DriverManager.getConnection(
                    url,
                    "root",
                    "123456"
            );
            //3.创建statement
            statement = conn.createStatement();
            //4.创建查询sql
            String sql = "SELECT * FROM category limit 10";
            //5.执行查询操作，获取数据集 ResultSet
            // statement.execute(sql) 如果能够返回第一条数据就返回 true; 否则update delete 都返回 false
            // statement.executeUpdate(sql) 更新和插入,删除操作会返回影响的记录行数;如果是数据库的
            // DDL 操作，返回nothing 值
            // statement.executeQuery(sql) 执行查询操作,返回ResultSet结果集
            rs = statement.executeQuery(sql);
            //6.遍历数据集并将结果打印输出
            // rs.next() : 如果当前有下一条数据就返回为true，否则为false
            while(rs.next()){ // rs.next 会返回true : 当前有下一行，false:最后一行
                //rs.getInt(index) : index 从 1 开始
                int cid = rs.getInt("cid");
                String cname = rs.getString("cname");
                System.out.println(cid+","+cname);
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        //7.关闭数据集，statement，connection连接
        finally {
            try {
                if(!rs.isClosed()) rs.close();
                if(!statement.isClosed()) statement.close();
                if(!conn.isClosed()) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}
